访问电脑版页面

导航:老古开发网手机版STM32单片机与CAN总线

STM32单片机的can总线的配置

导读:
关键字:
STM32单片机,CAN总线,

STM32的can总线的配置如下:

CAN_InitStructure.CAN_TTCM=DISABLE;//禁止时间触发通信模式

CAN_InitStructure.CAN_ABOM=DISABLE;

CAN_InitStructure.CAN_AWUM=DISABLE;

CAN_InitStructure.CAN_NART=DISABLE;//CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失)

CAN_InitStructure.CAN_RFLM=DISABLE;

CAN_InitStructure.CAN_TXFP=DISABLE;

CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;

STM32单片机的can总线的配置

//CAN_Mode_LoopBack

//CAN_Mode_Normal

CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;

CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;//1--16

CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;//1--8

CAN_InitStructure.CAN_Prescaler=2;

CAN_Init(&CAN_InitStructure);

/* CAN filter init */

CAN_FilterInitStructure.CAN_FilterNumber=0;//选择过滤器0

CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//指定过滤器被设置为标识符屏蔽模式

CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//给出过滤器位宽为32位

下面根据设置的参数不同来决定can总线can总线的配置情况:

1、对扩展数据帧进行过滤:(只接收扩展数据帧)

CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id《《3)&0xFFFF0000)》》16;

CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id《《3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;

(注:标准帧数据帧、标准远程帧和扩展远程帧均被过滤)

2、对扩展远程帧过滤:(只接收扩展远程帧)

CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id《《3)&0xFFFF0000)》》16;

CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id《《3)|CAN_ID_EXT|CAN_RTR_REMOTE)&0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;

3、对标准远程帧过滤:(只接收标准远程帧)

CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id《《21)&0xffff0000)》》16;

CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id《《21)|CAN_ID_STD|CAN_RTR_REMOTE)&0xffff;

CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;

4、对标准数据帧过滤:(只接收标准数据帧)

CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id《《21)&0xffff0000)》》16;

CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id《《21)|CAN_ID_STD|CAN_RTR_DATA)&0xffff;

CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;

5、对扩展帧进行过滤:(扩展帧不会被过滤掉)

CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id《《3)&0xFFFF0000)》》16;

CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id《《3)|CAN_ID_EXT)&0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFC;

6、对标准帧进行过滤:(标准帧不会被过滤掉)

CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)slave_id《《21)&0xffff0000)》》16;

CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)slave_id《《21)|CAN_ID_STD)&0xffff;

CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;

CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFC;

注:slave_id为要过滤的id号。

来源:工程师周亮   作者:lhl545545  2018/12/3 14:31:00
栏目: [ STM32单片机与CAN总线]

相关阅读

STM32单片机对CAN过滤器的设置方法

详解stm32的CAN控制器(程序分享)

STM32F3—CAN通信自发自收

基于STM32F1O5的CAN总线中继器的设计与实现

基于STM32F105微控制器的双CAN冗余设计方案

STM32 CAN总线传输波特率的计算

STM32系列第25篇--CAN总线

基于STM32和CAN总线的电动车电池管理系统设计

STM32和CAN总线在温度监控系统中的应用

STM32单片机的can总线的配置

调试STM32F107的CAN模块

STM32单片机bxCAN的工作模式解析

STM32的can现场总线的特点及工作流程分析